# coding=utf-8
import json
from hetong.qwen.mode_api import send_message
import dashscope

dashscope.api_key = "sk-245aab0a563b4ffca05f09d3f62127d3"


def split_text(text, max_length=1000):
    # 根据最大长度分割文本
    paragraphs = text.split('\n\n')
    segments = []
    current_segment = ""

    for paragraph in paragraphs:
        if len(current_segment) + len(paragraph) + 2 <= max_length:
            current_segment += paragraph + "\n\n"
        else:
            segments.append(current_segment.strip())
            current_segment = paragraph + "\n\n"

    if current_segment:
        segments.append(current_segment.strip())

    return segments


def extract_info(text):
    # {
    #     "instruction": "你是专门进行实体抽取的专家。请从input中抽取出符合schema定义的实体，不存在的实体类型返回空列表。请按照JSON字符串的格式回答。",
    #     "schema": {
    #         "职位": "实体类型描述个人或群体的职业或职务，包括特定角色名称如'制片方'，'报分员'，'苦行僧'，'油画家'。",
    #         "景点": "景点实体类型包括建筑物、博物馆、纪念馆、美术馆、河流、山峰等。代表性实体有五角大楼、泰特当代美术馆、郑成功纪念馆、都喜天阙、巴里卡萨、罗博河、gunungbatur、愚公移山LIVE、徐悲鸿纪念馆、杜莎夫人蜡像馆等。",
    #         "公司": "公司是一个实体类型，代表任何法人实体或商业组织。这个类型的实体可以是餐饮集团，制造商，零售商，酒店，银行，设计院等各种类型的公司。例如：'香格里拉酒店集团', 'JVC', '上海酷蕾专业电竞外设装备店', 'k2&bull;海棠湾', '武钢', 'louisvuitton', '苏格兰银行', '北京市建筑设计研究院', '7天', '万科集团'。",
    #         "地址": "地址实体是指具有地理位置信息的实体，它可以代表一个国家、城市、区域、街道等具体的地方或者一个抽象的地理区域。例如：'曼哈顿下城区东南尖上的河边码头', '图阿普谢', '意大利威尼斯水乡', '湖州温泉高尔夫球场', '北卡罗来纳州', '京津区域', '开心网吧', '颐年护理院', '上塘镇浦东', '内蒙古自治区赤峰市'等。",
    #         "组织机构": "组织机构实体是指集体性质的组织，比如公司、商铺、俱乐部、学校等。它们在社会和经济活动中扮演一定角色，并拥有一定的人格权。",
    #         "电影": "电影实体包括中文或英文电影名称，有时也包括电影人物角色名。"
    #     },
    #     "input": "我很难想象在另外一个项目再做一个海渔广场，当时我们拿到这个项目的时候，我正好在三亚，"
    # }
    # 设计提示
    prompt = (
        f"从以下文本中抽取信息并按指定格式输出,如果缺少具体的内容把字段值置为空即可，不需要补充内容，避免过度提示，如果有具体数值，提取具体数值内容,最后将结果转JSON格式。\n\n{text}\n\n"
        "格式：\n合同编号,工程名称-施工服务范围,合作内容-专业,服务区域,施工服务费取费标准,适用取费标准文件判断,合同执行期限,框架合同上限,增值税率/征收率,合同折扣率（含税）,合同折扣率（不含税）,合同下浮率,合同支付条款,合同签订日期,计日工,建设用地及综合赔补费,建设协调费/施工协调费,选址协调费,物业赔偿费,二次搬运费,模测费,标签制作费,资源录入费,搬迁设备包装及运输费用,联合试运转调测费,零星材料及录入费,部分取费项取消,施工调遣费,安全文明施工费"
    )
    print(prompt)
    messages = [{'role': 'system', 'content': '你是一个合同数据提取员'},
                {'role': 'user', 'content': prompt}]


    response = send_message(prompt,system_prompt='你是一个合同数据分析工程师')

    if 'id' in response:
        # 获取模型输出
        print(response)
        return response['choices'][0]['message']['content']
    else:
        print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
            response.id, response.model,
            response.object
        ))


def merge_result(text):
    # 设计提示
    prompt = (
        f"把下面的结果整理到一个json对象。在原有的字段基础上，为空字段需要保留，为空的值统一为空字符串。\n\n{text}\n\n"
        # "字段保留如下：\n合同编号,工程名称-施工服务范围,合作内容-专业,服务区域,施工服务费取费标准,适用取费标准文件判断,合同执行期限,框架合同上限,增值税率/征收率,合同折扣率（含税）,合同折扣率（不含税）,合同下浮率,合同支付条款,合同签订日期,计日工,建设用地及综合赔补费,建设协调费/施工协调费,选址协调费,物业赔偿费,二次搬运费,模测费,标签制作费,资源录入费,搬迁设备包装及运输费用,联合试运转调测费,零星材料及录入费,部分取费项取消,施工调遣费,安全文明施工费"
    )
    prompt = f'''
        <指令>把所有数据整合到一个json对象上，注意不是json数组。原始文本中没有提供具体的数值或详细信息，则用空字符串表示不需要增加未提供等额外表示，不需要注释。 </指令>\n
        <已知信息>{text}</已知信息>\n
        <字段>合同编号,工程名称-施工服务范围,合作内容-专业,服务区域,施工服务费取费标准,适用取费标准文件判断,合同执行期限,框架合同上限,增值税率/征收率,合同折扣率（含税）,合同折扣率（不含税）,合同下浮率,合同支付条款,合同签订日期,计日工,建设用地及综合赔补费,建设协调费/施工协调费,选址协调费,物业赔偿费,二次搬运费,模测费,标签制作费,资源录入费,搬迁设备包装及运输费用,联合试运转调测费,零星材料及录入费,部分取费项取消,施工调遣费,安全文明施工费</字段>\n
    '''
    messages = [{'role': 'system', 'content': '数据合并'},
                {'role': 'user', 'content': prompt}]
    response = send_message(prompt, system_prompt='你是一个合同数据分析工程师')

    if 'id' in response:
        # 获取模型输出
        print(response)
        return response['choices'][0]['message']['content']
    else:
        print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
            response.id, response.model,
            response.object
        ))


def process_segments(segments,ht):
    results = []
    for segment in segments:
        extracted_info = extract_info(segment)
        results.append(extracted_info)
    temp = merge_result(json.dumps(results, ensure_ascii=False))
    return [temp]

if __name__ == '__main__':
    data = '''
    ['```json\n{\n  "合同编号": "",\n  "工程名称-施工服务范围": "",\n  "合作内容-专业": "",\n  "服务区域": "",\n  "施工服务费取费标准": "",\n  "适用取费标准文件判断": "",\n  "合同执行期限": "",\n  "框架合同上限": "",\n  "增值税率/征收率": "",\n  "合同折扣率（含税）": "",\n  "合同折扣率（不含税）": "",\n  "合同下浮率": "",\n  "合同支付条款": "[□ 按通用条款第82.2款规定提交。■ 按专用条款第82.6款规定提交。]",\n  "合同签订日期": "",\n  "计日工": "",\n  "建设用地及综合赔补费": "",\n  "建设协调费/施工协调费": "",\n  "选址协调费": "",\n  "物业赔偿费": "",\n  "二次搬运费": "",\n  "模测费": "",\n  "标签制作费": "",\n  "资源录入费": "",\n  "搬迁设备包装及运输费用": "",\n  "联合试运转调测费": "",\n  "零星材料及录入费": "",\n  "部分取费项取消": "",\n  "施工调遣费": "",\n  "安全文明施工费": ""\n}\n```\n\n由于提供的文本内容主要是关于工程项目的管理规定和承包商的责任，没有直接涉及具体的合同编号、工程名称、专业服务内容、费用标准等关键信息，这些字段在给定的文本中并未明确给出。因此，上述JSON中的相应字段值都为空。如果需要填充这些字段，需要更多具体合同条款或实际的项目信息。', '```json\n{\n  "合同编号": "",\n  "工程名称-施工服务范围": "未提供",\n  "合作内容-专业": "施工",\n  "服务区域": "",\n  "施工服务费取费标准": "",\n  "适用取费标准文件判断": "",\n  "合同执行期限": "",\n  "框架合同上限": "",\n  "增值税率/征收率": "",\n  "合同折扣率(含税)": "",\n  "合同折扣率(不含税)": "",\n  "合同下浮率": "",\n  "合同支付条款": {\n    "误期赔偿费": {\n      "每日历天应赔额度": "专用条款约定",\n      "最高限额": "合同价款的5%",\n      "支付方式": "列入进度支付文件或竣工结算文件中"\n    }\n  },\n  "合同签订日期": "",\n  "计日工": "",\n  "建设用地及综合赔补费": "",\n  "建设协调费/施工协调费": "",\n  "选址协调费": "",\n  "物业赔偿费": "",\n  "二次搬运费": "",\n  "模测费": "",\n  "标签制作费": "",\n  "资源录入费": "",\n  "搬迁设备包装及运输费用": "",\n  "联合试运转调测费": "",\n  "零星材料及录入费": "",\n  "部分取费项取消": "",\n  "施工调遣费": "",\n  "安全文明施工费": ""\n}\n```\n\n由于提供的文本中没有具体的合同编号、工程名称、服务区域、施工服务费取费标准、增值税率、合同折扣率、下浮率、计日工、具体金额或日期等关键信息，这些字段都为空。如有需要，您需要提供包含这些详细信息的完整合同文本。', '```json\n{\n  "合同编号": "",\n  "工程名称-施工服务范围": "",\n  "合作内容-专业": "",\n  "服务区域": "",\n  "施工服务费取费标准": "",\n  "适用取费标准文件判断": "",\n  "合同执行期限": "",\n  "框架合同上限": "",\n  "增值税率/征收率": "",\n  "合同折扣率(含税)": "",\n  "合同折扣率(不含税)": "",\n  "合同下浮率": "",\n  "合同支付条款": "除费用索赔、现场签证事件分别按照第74条、第75条规定外",\n  "合同签订日期": "",\n  "计日工": "",\n  "建设用地及综合赔补费": "",\n  "建设协调费/施工协调费": "",\n  "选址协调费": "",\n  "物业赔偿费": "",\n  "二次搬运费": "",\n  "模测费": "",\n  "标签制作费": "",\n  "资源录入费": "",\n  "搬迁设备包装及运输费用": "",\n  "联合试运转调测费": "",\n  "零星材料及录入费": "",\n  "部分取费项取消": "",\n  "施工调遣费": "",\n  "安全文明施工费": "",\n  "后继法律法规变化事件": {\n    "调整依据": "第69.1条",\n    "误期赔偿费": {\n      "延迟初步验收": "N*0.2‰",\n      "延迟竣工验收": "N*0.2‰",\n      "最高限额": "合同价款的3%",\n      "上限": "300万元"\n    }\n  },\n  "工程变更事件": "采购订单合同价款的调整",\n  "物价涨落事件": "包括在采购订单合同价款调整因素中",\n  "费用索赔事件": "采购订单合同价款调整因素之一",\n  "现场签证事件": "采购订单合同价款调整因素之一",\n  "合同双方约定的其他调整事件": "由发包人引起的工程变更、设计变更"\n}\n```\n\n注意：上述内容中的"N"、具体数值和合同编号需要从实际文本中提取，这里为了简洁起见，没有提供具体的数值。请根据实际文本中的内容替换这些占位符。', '```json\n{\n  "合同编号": "",\n  "工程名称-施工服务范围": "",\n  "合作内容-专业": "",\n  "服务区域": "",\n  "施工服务费取费标准": "投标折扣率后的综合单价包干",\n  "适用取费标准文件判断": "",\n  "合同执行期限": "",\n  "框架合同上限": "",\n  "增值税率/征收率": "",\n  "合同折扣率（含税）": "",\n  "合同折扣率（不含税）": "",\n  "合同下浮率": "",\n  "合同支付条款": "",\n  "合同签订日期": "",\n  "计日工": "",\n  "建设用地及综合赔补费": "",\n  "建设协调费/施工协调费": "",\n  "选址协调费": "",\n  "物业赔偿费": "",\n  "二次搬运费": "",\n  "模测费": "",\n  "标签制作费": "",\n  "资源录入费": "",\n  "搬迁设备包装及运输费用": "",\n  "联合试运转调测费": "",\n  "零星材料及录入费": "",\n  "部分取费项取消": "",\n  "施工调遣费": "",\n  "安全文明施工费": ""\n}\n```\n\n由于提供的文本中并未包含具体的合同编号、工程名称、服务区域、施工服务费取费标准等关键信息，这些字段在上述示例中都为空。如果这些信息可以从文本中提取，你需要提供含有这些详细信息的具体文本。']
    '''
    result = merge_result(data)
    print(result)
